
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.capa.view.mbean;

import com.brain.capa.dto.CursoDto;
import com.brain.capa.dto.RequerimientoCapaDto;
import com.brain.capa.manager.CursoManager;
import com.brain.capa.manager.RequerimientoCapaManager;
import com.brain.capa.view.util.ConstantesCapa;
import com.brain.core.common.UtilCore;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.view.mbean.*;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.util.ApplicationHelper;
import com.brain.core.view.util.ConstantesCore;
import com.brain.sgc.view.util.ConstantesSgc;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Hvives
 */
@Controller("cursoMBean")
@Scope("session")
public class CursoMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(CursoMBean.class);
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private CursoManager manager;
    @Resource
    private RequerimientoCapaManager requerimientoCapaManager;
    private List<CursoDto> lista;
    private CursoDto dto;
    private CursoDto dtoFiltro;
    private String keyTitulo = "curso.panel";
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private List<ParametroDto> listaEstadosFiltro;
    private List<ParametroDto> listaEstados;
    private List<ParametroDto> listaTipos;
    private List<ParametroDto> listaTiposFiltro;
    private List<ParametroDto> listaCategorias;
    private List<ParametroDto> listaCategoriasFiltro;
    private List<ParametroDto> listaTipoFiltro;
    private List<ParametroDto> listaModalidadFiltro;
    private List<ParametroDto> listaModalidad;
    private List<ParametroDto> listaBase;
    private List<ParametroDto> listaBaseFiltro;
    private List<ParametroDto> listaGrupobjetivo;
    private List<ParametroDto> listaGrupobjetivoFiltro;
    
    private int fechaFiltro = 2012;
    
    private List<RequerimientoCapaDto> listaCursosPorRequerimientoReporte;
    private List<RequerimientoCapaDto> listaCursosPorRequerimientoReporteTotal;

    public CursoMBean() {
        this.dtoFiltro = new CursoDto();
    }

    public String iniciar() {
        this.dto = null;
        this.lista = null;
        this.dtoFiltro = new CursoDto();
        return ConstantesCapa.UrlNavegacion.URL_LISTA_CURSOS;
    }

    public String nuevo() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dto = new CursoDto();
        this.dto.setEstadoDto(new ParametroDto(ConstantesCapa.Parametro.CURSO_ESTADO_ACTIVO));
        return ConstantesCapa.UrlNavegacion.URL_CURSO;
    }

    public String editar() {
        sessionMBean.setAccion(ConstantesCapa.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        ApplicationHelper.cargarPropietarios(ConstantesCapa.Entidad.CURSO, this.dto.getId());
        return ConstantesCapa.UrlNavegacion.URL_CURSO;
    }
    
    public String reporteCurso(){
        this.dto = new CursoDto();
        this.listaReporteCurso();
        return ConstantesCapa.UrlNavegacion.URL_LISTA_CURSOS_REPORTE; 
    }

    public String ver() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        ApplicationHelper.cargarPropietarios(ConstantesCapa.Entidad.CURSO, this.dto.getId());
        return ConstantesCapa.UrlNavegacion.URL_CURSO;
    }

    public void buscar(ActionEvent ae) {

        try {
            this.lista = this.manager.obtenerCursoFiltro(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }
    public void buscarReporte (ActionEvent ae) {

        try {
            this.listaCursosPorRequerimientoReporte = this.requerimientoCapaManager.obtenerReporteFiltro(this.fechaFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }
    public void listaReporteCurso(){
        try {
                this.listaCursosPorRequerimientoReporte = this.requerimientoCapaManager.obtenerListaCursosReporte();
                for(RequerimientoCapaDto repCapRe: this.listaCursosPorRequerimientoReporte){
                    if(repCapRe.getProgramacionDto()==null){
                        repCapRe.setComentario(ConstantesCapa.ValoresConstantes.REPORTE_ESTATUS_CURSO);
                    }else{
                        repCapRe.setComentario(repCapRe.getProgramacionDto().getEstadoDto().getDescripcion());
                    }
                }
            } catch (DAOException ex) {
                logger.error("ERROR DE SISTEMA", ex);
                showError(ex.getMessage());
            }
    }
    public String guardar() {
        
            if(this.dto.getHora().compareTo(this.dto.getAsistenciaMinima())>0){
                if (this.manager.guardar(this.dto) != null) {
                return retroceder();
                }
            }else{
                showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("capacitacion.curso.mensaje.nota.minima"));
            }
        return "";
    }

    public String retroceder() {
        buscar(null);
        sessionMBean.setAccion(ConstantesSgc.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesCapa.UrlNavegacion.URL_LISTA_CURSOS;
    }
    
    public void generarExcelPorTabla() {
        this.manager.generarExcelPorTabla(this.listaCursosPorRequerimientoReporte);
    }
    
    public void generarExcelTotal(){
        try {
                this.listaCursosPorRequerimientoReporteTotal = this.requerimientoCapaManager.obtenerListaCursosReporte();
                for(RequerimientoCapaDto repCapRe: this.listaCursosPorRequerimientoReporte){
                    if(repCapRe.getProgramacionDto()==null){
                        repCapRe.setComentario(ConstantesCapa.ValoresConstantes.REPORTE_ESTATUS_CURSO);
                    }else{
                        repCapRe.setComentario(repCapRe.getProgramacionDto().getEstadoDto().getDescripcion());
                    }
                }
            } catch (DAOException ex) {
                logger.error("ERROR DE SISTEMA", ex);
                showError(ex.getMessage());
            }
         this.manager.generarExcelPorTabla(this.listaCursosPorRequerimientoReporteTotal);
    }
    

    public CursoManager getManager() {
        return manager;
    }

    public void setManager(CursoManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public List<CursoDto> getLista() {
        return lista;
    }

    public void setLista(List<CursoDto> lista) {
        this.lista = lista;
    }

    public CursoDto getDto() {
        return dto;
    }

    public void setDto(CursoDto dto) {
        this.dto = dto;
    }

    public CursoDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(CursoDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<ParametroDto> getListaEstadosFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCapa.CatalogoParametro.CURSO_ESTADOS, ConstantesCore.Parametro.TODOS);
    }

    public void setListaEstadosFiltro(List<ParametroDto> listaEstadosFiltro) {
        this.listaEstadosFiltro = listaEstadosFiltro;
    }

    public List<ParametroDto> getListaEstados() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCapa.CatalogoParametro.CURSO_ESTADOS);
    }

    public List<ParametroDto> getListaTipos() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCapa.CatalogoParametro.CURSO_TIPOS);
    }

    public void setListaTipos(List<ParametroDto> listaTipos) {
        this.listaTipos = listaTipos;
    }

    public List<ParametroDto> getListaTiposFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCapa.CatalogoParametro.CURSO_TIPOS,ConstantesCore.Parametro.TODOS);
    }

    public void setListaTiposFiltro(List<ParametroDto> listaTiposFiltro) {
        this.listaTiposFiltro = listaTiposFiltro;
    }
    

    public List<ParametroDto> getListaCategorias() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCapa.CatalogoParametro.CURSO_CATEGORIAS);
    }

    public void setListaCategorias(List<ParametroDto> listaCategorias) {
        this.listaCategorias = listaCategorias;
    }

    public List<ParametroDto> getListaCategoriasFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCapa.CatalogoParametro.CURSO_CATEGORIAS,ConstantesCore.Parametro.TODOS);
    }

    public void setListaCategoriasFiltro(List<ParametroDto> listaCategoriasFiltro) {
        this.listaCategoriasFiltro = listaCategoriasFiltro;
    }
    
    public void setListaEstados(List<ParametroDto> listaEstados) {
        this.listaEstados = listaEstados;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        CursoMBean.logger = logger;
    }

    public List<ParametroDto> getListaTipoFiltro() {
        return listaTipoFiltro;
    }

    public void setListaTipoFiltro(List<ParametroDto> listaTipoFiltro) {
        this.listaTipoFiltro = listaTipoFiltro;
    }

    public List<ParametroDto> getListaModalidadFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCapa.CatalogoParametro.CURSO_MODALIDAD,ConstantesCore.Parametro.TODOS);
    }

    public void setListaModalidadFiltro(List<ParametroDto> listaModalidadFiltro) {
        this.listaModalidadFiltro = listaModalidadFiltro;
    }

    public List<ParametroDto> getListaModalidad() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCapa.CatalogoParametro.CURSO_MODALIDAD);
    }

    public void setListaModalidad(List<ParametroDto> listaModalidad) {
        this.listaModalidad = listaModalidad;
    }

    public List<RequerimientoCapaDto> getListaCursosPorRequerimientoReporte() {
        return listaCursosPorRequerimientoReporte;
    }

    public void setListaCursosPorRequerimientoReporte(List<RequerimientoCapaDto> listaCursosPorRequerimientoReporte) {
        this.listaCursosPorRequerimientoReporte = listaCursosPorRequerimientoReporte;
    }

    public List<ParametroDto> getListaBase() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCapa.CatalogoParametro.CURSO_BASE);
    }

    public void setListaBase(List<ParametroDto> listaBase) {
        this.listaBase = listaBase;
    }

    public List<ParametroDto> getListaBaseFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCapa.CatalogoParametro.CURSO_BASE,ConstantesCore.Parametro.TODOS);
    }

    public void setListaBaseFiltro(List<ParametroDto> listaBaseFiltro) {
        this.listaBaseFiltro = listaBaseFiltro;
    }

    public List<ParametroDto> getListaGrupobjetivo() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCapa.CatalogoParametro.CURSO_GRUPO_OBJETIVO);
    }

    public void setListaGrupobjetivo(List<ParametroDto> listaGrupobjetivo) {
        this.listaGrupobjetivo = listaGrupobjetivo;
    }

    public List<ParametroDto> getListaGrupobjetivoFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCapa.CatalogoParametro.CURSO_GRUPO_OBJETIVO,ConstantesCore.Parametro.TODOS);
    }

    public void setListaGrupobjetivoFiltro(List<ParametroDto> listaGrupobjetivoFiltro) {
        this.listaGrupobjetivoFiltro = listaGrupobjetivoFiltro;
    }

    public int getFechaFiltro() {
        return fechaFiltro;
    }

    public void setFechaFiltro(int fechaFiltro) {
        this.fechaFiltro = fechaFiltro;
    }

    public List<RequerimientoCapaDto> getListaCursosPorRequerimientoReporteTotal() {
        return listaCursosPorRequerimientoReporteTotal;
    }

    public void setListaCursosPorRequerimientoReporteTotal(List<RequerimientoCapaDto> listaCursosPorRequerimientoReporteTotal) {
        this.listaCursosPorRequerimientoReporteTotal = listaCursosPorRequerimientoReporteTotal;
    }

    
}
